package lu.med.praxiswahl.wahlumed.client.ordonancen;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import lu.med.praxiswahl.wahlumed.client.utilities.ContextFactoryRemote;
import lu.med.praxiswahl.wahlumed.client.utilities.ContextFactoryRemoteInt;
import lu.med.praxiswahl.wahlumed.client.utilities.UniCode;
import lu.med.praxiswahl.wahlumed.client.wclient.Main;
import lu.med.praxiswahl.wahlumed.service.beans.serviceinterface.OrdonanceTemplateServiceInt;

/**
 * 
 * @author Lars Holger Roth
 */
public class OrdonancenNewDialog extends JDialog implements ActionListener
{
    /**
     * 
     */
    private static final long serialVersionUID = -923547225473456970L;
    private OrdonancenPanel panel;
    private JTextField input;
    private JTextArea ip;
    public static final int MODE_NEW = 0;
    public static final int MODE_EDIT = 1;
    private Main dataManager;
    private String keyword;
    private int mode = 0; // 1 neu erstellen 0 überschreiben
    private Long id;

    public OrdonancenNewDialog(Main dataManager, int mode, int curIndex,
	    OrdonancenPanel panel, String keyword, Long id)
    {
	super(dataManager, "Ordonancen Editor", true);
	this.setDataManager(dataManager);
	this.panel = panel;
	this.keyword = keyword;
	this.id = id;
	if ((id == null) && (mode == MODE_EDIT))
	{
	    JOptionPane.showMessageDialog(dataManager, "Sie m"
		    + UniCode.getue() + "ssen zuerst eine Vorlage ausw"
		    + UniCode.getae() + "hlen.");
	    // return;
	}
	this.mode = mode;
	this.setLayout(new BorderLayout());
	JPanel upper, lower;
	upper = new JPanel(new GridLayout(0, 2));
	upper.add(new JLabel("Schl" + UniCode.getue() + "sselwort:"));
	input = new JTextField("");
	upper.add(input);
	this.add(upper, BorderLayout.NORTH);
	lower = new JPanel(new BorderLayout());
	ip = new JTextArea();

	// Wenn der Bearbeiten Modus ausgewaehlt wurde, dann wird
	// Text und Schluesselwort aus dem Model geladen
	if (mode == MODE_EDIT)
	{
	    // input.setText((String)panel.getListModel().getElementAt(curIndex));
	    // Fragt den zugehörigen Text vom Server ab
	    ip.setText(dataManager.getOrdonancenContext()
		    .getOrdonanceTemplateMainTxt(id));
	    input.setText(dataManager.getOrdonancenContext()
		    .getOrdonanceTemplateLabel(id));
	}

	JScrollPane a = new JScrollPane(ip);
	lower.add(a, BorderLayout.CENTER);
	JPanel but = new JPanel();
	JButton cb, okb;
	cb = new JButton("Abbrechen");
	okb = new JButton("" + UniCode.getUE() + "bernehmen");
	cb.addActionListener(new OrdonancenCancelActionListener(this));
	okb.addActionListener(this);
	but.add(okb);
	but.add(cb);

	this.add(lower, BorderLayout.CENTER);
	this.add(but, BorderLayout.SOUTH);
	this.pack();
	this.setVisible(true);
    }

    public void actionPerformed(ActionEvent e)
    {
	// Klick auf das OK Button, die Daten werden an den Server
	// �bertragen und die Anzeige erneuert
	if (input.getText().equals(""))
	{
	    JOptionPane.showMessageDialog(this, "Es muss ein Schl"
		    + UniCode.getue() + "sselwort angegeben werden", "WClient",
		    JOptionPane.ERROR_MESSAGE);
	    return;
	}
	if (ip.getText().equals(""))
	{
	    JOptionPane.showMessageDialog(this,
		    "Es muss ein Text angegeben werden", "WClient",
		    JOptionPane.ERROR_MESSAGE);
	    return;
	}
	// Überträgt die Daten
	ContextFactoryRemoteInt remote_context = new ContextFactoryRemote();
	OrdonanceTemplateServiceInt ord = remote_context
		.getRemoteContextOrdonanceTemplateService();

	// Erstellen oder überschreiben
	if (mode == MODE_NEW)
	{
	    ord.createTemplate(input.getText(), keyword, ip.getText());
	}
	else
	{
	    ord.updateActualTemplate(id, input.getText(), ip.getText());
	}

	panel.refreshMo();
	this.setVisible(false);
    }

    public void setDataManager(Main dataManager)
    {
	this.dataManager = dataManager;
    }

    public Main getDataManager()
    {
	return dataManager;
    }

}
